import Vue from 'vue'

// 全局JS异常监控 无法识别Vue组件信息
window.addEventListener('error', (event) => {
  console.log('-------error-----', event)
  // 错误类型
  if (event instanceof ErrorEvent) {
    // 脚本错误
    console.log('脚本错误')
  } else if (event instanceof Event) {
    // 资源错误
    console.log('资源错误')
  }
  // 外部资源错误
  if (event.target !== window) {
    console.log('外部资源错误', event.target.tagName, event.target.src)
  }
  // handleError()
  // 阻止默认事件不抛到控制台
  event.preventDefault()
}, true)
// unhandledrejection会在Promise发生异常且没有指定catch时触发 兜底方案
window.addEventListener('unhandledrejection', (error) => {
  console.log('promise异常监听', error.reason)
  // TODO handleError()
  // 阻止控制台打印
  error.preventDefault()
})

// Vue全局错误监听，所有组件错误都会汇总到这里
// errorCaptured会监听子组件错误 return false 会阻止向上汇报 避免重复提交
Vue.config.errorHandler = (err, vm, info) => {
  const { message, name, script, line, column, stack } = err
  console.log('vue异常监听', { message, name, script, line, column, stack }, info)
  // TODO handleError()
}
